package gomz.pres.admin;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * Diese Klasse steuert das UI des Imports.
 * 
 * @author Dilji
 */

public class CAImport {

	// ********************************************************************************
	// Variabeln
	// ********************************************************************************
	private MVerwaltung model;
	private GUIAImport view;
	private JFrame pWindow;

	// *********************************************************************************
	// Konstruktor
	// ********************************************************************************
	/**
	 * Konstruktor fuer den Controller Import
	 */
	public CAImport(JFrame pWindow, GUIAImport view, MVerwaltung model) {
		this.model = model;
		this.view = view;
		this.pWindow = pWindow;

		addListener();
	}

	// ********************************************************************************
	// Listener
	// ********************************************************************************
	/**
	 * Ereignisbehandlung der Buttons
	 */
	public void addListener() {

		// Durchsuchen
		view.getBtTsearch().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				doBrowse();
			}
		});

		// Editieren
		view.getBtTimport().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				doImport();
			}
		});

		// Abbrechen
		view.getBtTcan().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				doCancel();
			}
		});

	}

	// ********************************************************************************
	// Methoden
	// ********************************************************************************
	/**
	 * Diese Methode oeffnet den Dialog damit die Datei fuer den Import ausgewaehlt 
	 * werden kann (nur csv-Dateien moeglich)
	 */
	public void doBrowse() {
		
		// initialize path for import
		String importPath = null;
		
		// initialize FileChooser
		JFileChooser fcBrowse = new JFileChooser();
		
		// Titel des Import-Fensters setzten
		fcBrowse.setDialogTitle("Import");
		
		 // initialize filter fur csv
	    final FileNameExtensionFilter excelFilter = new FileNameExtensionFilter("Excel-Dokument (*.csv)", "csv"); 

	    // add filter excel
	    fcBrowse.addChoosableFileFilter(excelFilter);
	    
	    // "Alle Dateien" Option ausblenden
	    fcBrowse.setAcceptAllFileFilterUsed(false);
		
		int temp = fcBrowse.showDialog(fcBrowse, "Importieren");
		if (temp == JFileChooser.APPROVE_OPTION) {
			importPath = fcBrowse.getSelectedFile().getAbsolutePath();
		}
		
		// ausgewahlte Datei ins Pfad-Textfeld setzten
		view.setTfTpath(importPath);
		
	}

	/**
	 * Diese Methode prueft den Pfad, die Kategorieauswahl
	 */
	public void doImport() {
		
		// Ob Frage ausgewahlt
		Boolean liSel = false;
				
		// Wenn etwas ausgewahlt, dann true
		int[] i = view.getLiTcat().getCheckedIndeces();
		for(int j : i){
			liSel = true;
		}
		
		// pruefen ob Pfad nicht leer ist
		if(view.getTfTpath().getText().equals(null) || view.getTfTpath().getText().equals("")) {
			JOptionPane.showMessageDialog(pWindow, "Bitte w\u00e4hlen Sie eine Datei f\u00fcr den Import aus.", "Keine Datei ausgew\u00e4hlt", JOptionPane.WARNING_MESSAGE);
		// pruefen ob pfad mit .csv endet
		} else if(!(view.getTfTpath().getText().endsWith(".csv"))){
			JOptionPane.showMessageDialog(pWindow, "Die ausgew\u00e4hlt Datei ist kein Excel-Dokument (*.csv).", "Kein Excel-Dokument", JOptionPane.WARNING_MESSAGE);
		// pruefen ob kategorie ausgewaehlt wurde
		} else if(!(liSel)){
			JOptionPane.showMessageDialog(pWindow, "Bitte w\u00e4hlen Sie eine Kategorie f�r den Import aus.", "Keine Kategorie ausgew\u00e4hlt", JOptionPane.WARNING_MESSAGE);
		// wenn alles ok - methode importQuestionFromCsv aufrufen
		} else{
			File sFile = new File(view.getTfTpath().getText());
			if(model.importQuestionFromCsv(sFile, view.getLiTcat().getCheckedIndeces())){
				JOptionPane.showMessageDialog(pWindow, "Die Datei wurde importiert", "Import erfolgreich", JOptionPane.INFORMATION_MESSAGE);
			} else {
				JOptionPane.showMessageDialog(pWindow, "Die Datei konnte nicht importiert werden.", "Fehler beim Import", JOptionPane.ERROR_MESSAGE);
			}			
		}
	}

	/**
	 * Diese Methode stellt alle Aenderungen in der Import-Ansicht zurueck
	 */
	public void doCancel() {
		view.setTfTpath(null);
		view.getLiTcat().uncheckAll();
		view.getLiTcat().clearSelection();
	}

	/**
	 * Diese Methode fuellt die Kategorieliste
	 */
	public void fillData(){
		view.getLiTcat().setListData(model.getCategoryList());
	}
}
